﻿#pragma once

#include "Device.h"
#include "../BusinessLayer/Containers.h"
#include "DeviceCANHub.h"

namespace DeviceLayer
{

class DeviceDemoAnyCAN : public Device
{
    DECLARE_DYNAMIC_CREATE(DeviceDemoAnyCAN)

    //对于CAN设备，需要通过CAN集线器来收发数据。
    //由于CAN集线器本身是设备，也是动态生成的，那么，这里需要从Container里获取CAN集线器对象。
    AUTO_WIRED_DEVICE(DeviceCANHub, canHub) //如果系统里只有一个CANHub，或者说，只有一条CAN总线，直接用AUTO_WIRED_DEVICE获取对象即可。
    //如果系统里有多个CANHub，或者说，有多条CAN总线，那么需要自己从container里去取一个对象。
    //这时，先定义一个DeviceCANHub的shared_ptr:
    //  std::shared_ptr<DeviceCANHub> canHub;
    //然后，见InitFromSettingData，我们在那里做初始化

    //这是数据接收回调函数。当CAN集线器接收到id属于本设备的CAN数据包时，会通过本回调函数，将收到的包内容传递过来。
    void OnDataReceived(const can_frame msg);

    //这是本设备的CAN id值，可以放到SettingData.xml中定义。
    int id;
public:
    DeviceDemoAnyCAN();

    virtual bool InitFromSettingData(const QString& path) override;
    virtual bool QueryData() override;
};

}
